package com.itheima.service.impl;

import cn.itheima.health.service.CheckGroupService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.itheima.healt.entlty.QueryPageBean;
import com.itheima.mapper.CheckGroupMapper;
import com.itheima.pojo.CheckGroup;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
@Transactional
public class CheckGroupServiceImpl implements CheckGroupService {
    @Autowired
    private CheckGroupMapper checkGroupMapper;
    @Override
    public void addGroup(CheckGroup checkGroup,int[] checkitemids) {

          //   新建 checkGroupMapper 并且添加一个方法 传入的 CheckGroup检查组
           checkGroupMapper.addGroup(checkGroup);//  xml  sql     主键封装到当前实体类中
            //使用传入的 CheckGroup 检查组作为参数.getId 获得当前记录的主键
        Integer groupId = checkGroup.getId();
        //这里设置一个判断，判断用户传入的中间表信息，避免空指针
        //   2.  添加中间表信息
        if(checkitemids!=null&&checkitemids.length!=0){
                //for 循环 遍历 用户勾选传入的参数
            for (int checkitemid : checkitemids) {
                //  在checkGroupMapper中创建一个方法 用于： 一边循环，一边将groupId 和 checkitemid 用户勾选的参数 等数据添加到 checkGroupMapper 中
                checkGroupMapper.addCheckGroupAndCheckItems(groupId,checkitemid);
            }
        }
    }

    @Override
    public Map findPage(QueryPageBean queryPageBean) {
        //这里做的是 封装查询分页所需要的数据
            //先创建一个Map集合
        Map map = new HashMap();
        //使用 PageHelper.startPage 分页小助手，得到CurrentPage() 和getPageSize() 的数据
        PageHelper.startPage(queryPageBean.getCurrentPage(),queryPageBean.getPageSize());
        //在 checkGroupMapper中创建一个带参的 findPage的方法，参数是 getQueryString()  符合 获取查询字符串的条件的数据 封装到List集合中
        List<CheckGroup> list = checkGroupMapper.findPage(queryPageBean.getQueryString());//  select * from  t_checkgroup
        //因为 页面 需要封装到 页面数据中，所以先创建一个  PageInfo ，数据类型是 CheckItem
        PageInfo<CheckGroup> pageInfo = new PageInfo<CheckGroup>(list);
        map.put("list",pageInfo.getList());
        map.put("total",pageInfo.getTotal());
        return map;
    }

    @Override
    public List<Integer> findCheckitemsByGroupId(Integer id) {
        return checkGroupMapper.findCheckitemsByGroupId(id);
    }

    @Override
    public void edit(CheckGroup checkGroup, int[] checkitemIds) {
        //  1.  更新检查组表信息
           checkGroupMapper.edit(checkGroup);
        //  2.    先解除中间表关系  再更新 insert
          checkGroupMapper.relieve(checkGroup.getId());  //  delete from  t_checkgroup_checkitem where checkgoup_id = #{id}
        //  更新
        //   2.  添加中间表信息
        if(checkitemIds!=null&&checkitemIds.length!=0){
            for (int checkitemid : checkitemIds) {
                // 插入中间表
                checkGroupMapper.addCheckGroupAndCheckItems(checkGroup.getId(),checkitemid);
            }
        }
    }

    @Override
    public List<CheckGroup> findAll() {
        return checkGroupMapper.findAll();
    }


}
